# ========== 1. 构建环境 ==========
FROM eclipse-temurin:17-jdk AS builder

ARG APP_NAME=demo

# 设置工作目录
WORKDIR /app

# 优先复制gradle相关文件，利用Docker缓存层
COPY build.gradle settings.gradle gradlew ./
COPY gradle gradle

# 如果有子项目，也优先复制其gradle配置文件
COPY demo/build.gradle demo/
COPY data/build.gradle data/
COPY base/build.gradle base/
COPY langchain4j/build.gradle langchain4j/
# 复制其他子项目的build.gradle...

# 下载依赖（利用Docker缓存，仅当依赖变更时重新下载）
RUN ./gradlew dependencies --no-daemon

# 复制源代码
COPY . .

# 编译指定子项目，排除测试以加速构建
RUN ./gradlew :${APP_NAME}:build -x test --no-daemon

# ========== 2. 运行环境 ==========
FROM eclipse-temurin:17-jre-alpine AS runtime

# 创建非root用户运行应用
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# 设置工作目录
WORKDIR /app

# 从构建阶段复制构建产物
COPY --from=builder /app/${APP_NAME}/build/libs/*.jar app.jar

# 修改文件权限
RUN chown -R appuser:appgroup /app

# 切换到非root用户
USER appuser

# 暴露端口
EXPOSE 8080

# 设置启动命令（使用exec格式）
ENTRYPOINT ["java", "-jar", "app.jar"]